library(ggplot2)
library(plotly)
library(knitr)
library(EDAWR)
library(dplyr)
library(caret)
library(Hmisc)
library(randomForest)
opts_chunk$set(echo=FALSE, message=FALSE, warning=FALSE)
Podczas wczytywania danych ustawiono wykrywanie wartości brakujących na znak ‘?’. Dodatkowo przypisano poszczególne klasy danym atrybutom. Szczególnie istotne było to w przypadku zmiennej xmonth, która oznacza konkretny miesiąc.
Poniżej zamieszczono kod pobierający dane do zmiennej ‘sledzie’.
sledzie <- read.csv("sledzie.csv", dec = ".", na.strings = "?", colClasses=c(rep('numeric', 9), rep('integer', 1), rep('numeric', 4), rep('factor', 1), rep('numeric', 1)))
Sprawdzono, że kolumny zawierające wartości brakujące to: cfin1, cfin2, chel1, chel2, lcop1, lcop2, sst. Zauważono, że dla jednej wartości totaln ww. atrybuty mają te same wartości. Wykorzystano to spostrzeżenie do utworzenia tabeli pomocniczej, w której oszacowano brakujące dane. Algorytm wyznaczania brakującej wartości grupuje tabelę po zmiennej totaln i dla każdej grupy tworzy rekord w tabeli pomocniczej z medianami kolejnych argumentów.
Następnie dla każdego z argumentu wyznaczano krotki z brakującymi wartościami i dla każdej takiej pozycji przypisywano wartość z tabeli pomocniczej.
Poniżej kod przedstawiający stworzenie tabeli pomocniczej.
# Tabela pomocnicza z medianą wartości poszczególnych atrybutów dla każdej grupy totaln
tmpTable <- sledzie %>% group_by(totaln) %>% arrange(totaln) %>% summarise( cfin1 = median(cfin1, na.rm = TRUE), cfin2 = median(cfin2, na.rm = TRUE), chel1 = median(chel1, na.rm = TRUE), chel2 = median(chel2, na.rm = TRUE), lcop1 = median(lcop1, na.rm = TRUE), lcop2 = median(lcop2, na.rm = TRUE), sst = median(sst, na.rm = TRUE))
Dalej na przykładzie zmiennej CFIN1 uzupełnienie brakujących wartości
# Uzupełnienie CFIN1
a<-sledzie %>% select(X, cfin1, totaln) %>% filter(is.na(cfin1))
for(i in 1:length(a[,1])){
sledzie$cfin1[a$X[i]+1] <- as.numeric(tmpTable %>% filter(totaln==sledzie$totaln[a$X[i]+1]) %>% select(cfin1))
}
Pozostałe atrybuty zostały uzupełnione w analogiczny sposób.
Zbiór posiada 52.582 pozycji. Każda pozycja określona jest zbiorem atrybutów, których podstawowe dane przedstawiono w tabeli.
| X | length | cfin1 | cfin2 | chel1 | chel2 | lcop1 | lcop2 | fbar | recr | cumf | totaln | sst | sal | xmonth | nao | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Min. : 0 | Min. :19.0 | Min. : 0.0000 | Min. : 0.0000 | Min. : 0.000 | Min. : 5.238 | Min. : 0.3074 | Min. : 7.849 | Min. :0.0680 | Min. : 140515 | Min. :0.06833 | Min. : 144137 | Min. :12.77 | Min. :35.40 | 8 : 9920 | Min. :-4.89000 | |
| 1st Qu.:13145 | 1st Qu.:24.0 | 1st Qu.: 0.0000 | 1st Qu.: 0.2778 | 1st Qu.: 2.469 | 1st Qu.:13.427 | 1st Qu.: 2.5479 | 1st Qu.:17.808 | 1st Qu.:0.2270 | 1st Qu.: 360061 | 1st Qu.:0.14809 | 1st Qu.: 306068 | 1st Qu.:13.60 | 1st Qu.:35.51 | 10 : 7972 | 1st Qu.:-1.89000 | |
| Median :26291 | Median :25.5 | Median : 0.1111 | Median : 0.7012 | Median : 5.750 | Median :21.435 | Median : 7.0000 | Median :24.859 | Median :0.3320 | Median : 421391 | Median :0.23191 | Median : 539558 | Median :13.86 | Median :35.51 | 7 : 6922 | Median : 0.20000 | |
| Mean :26291 | Mean :25.3 | Mean : 0.4432 | Mean : 2.0257 | Mean : 9.988 | Mean :21.219 | Mean : 12.8042 | Mean :28.422 | Mean :0.3304 | Mean : 520367 | Mean :0.22981 | Mean : 514973 | Mean :13.87 | Mean :35.51 | 9 : 5714 | Mean :-0.09236 | |
| 3rd Qu.:39436 | 3rd Qu.:26.5 | 3rd Qu.: 0.3333 | 3rd Qu.: 1.7936 | 3rd Qu.:11.500 | 3rd Qu.:27.193 | 3rd Qu.: 21.2315 | 3rd Qu.:37.232 | 3rd Qu.:0.4560 | 3rd Qu.: 724151 | 3rd Qu.:0.29803 | 3rd Qu.: 730351 | 3rd Qu.:14.16 | 3rd Qu.:35.52 | 6 : 4218 | 3rd Qu.: 1.63000 | |
| Max. :52581 | Max. :32.5 | Max. :37.6667 | Max. :19.3958 | Max. :75.000 | Max. :57.706 | Max. :115.5833 | Max. :68.736 | Max. :0.8490 | Max. :1565890 | Max. :0.39801 | Max. :1015595 | Max. :14.73 | Max. :35.61 | 5 : 3736 | Max. : 5.08000 | |
| NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | (Other):14100 | NA |
W tym punkcie zostaną przedstawione wykresy z zależności między zmiennymi. Badanie korelacji podzielono na dwa obszary: a) korelacja między wszystkimi atrybutami - przedstawiono wykresy dla najbardziej zależnych wartości
b) korelacja atrybutów z rozpatrywaną zmienną długości śledzi - W tym przypadku okazało się, że zmienna length najbardziej skorelowana jest z sst (-0.45), następnie z nao(-0.26), fbar(0.25), lcop1(0.24), chel1(0.22)
Do przewidzenia długości śledzi zastosowano metodę random forest. Podzielono zbiór danych na treningowy i testowy. Dane treningowe zajmowały 75% wszysktich rekordów. Do stworzenia modelu wykorzystano powtórzoną ocenę krzyżową o parametrach podziału na 2 podzbiory i 5 powtórzeniach. Dodatkowo optymalizacja atrybutów miała ulepszać miarę RMSE.
## RMSE Rsquared
## 1.1798606 0.4867333
Zgodnie z parametrami algorytmu regresji wynika, że największy udział ma zmienna cumf, czyli łączne roczne natężenie połowów. Zmienna ta jest o tyle zaskakująca, że przy wyliczaniu korelacji z atrybutem length miała wartość 0.01. Drugą co do ważności zmienną jest sst, czyli liczba stopni przy powierzchni wody. Wydaje się, że to jest bardziej prawdopodobne i ma potwierdzenie w korelacji ze zmienną length. Niestety dla algorytmu regresji random forest, rozkład udziału poszczególnych atrybutów jest bardzo zmienny. W zależności od wartości parametrów tj. liczby powtórzeń w algorytmie oceny krzyżowej, czy zmeinnej mtry, a także ustawionego seeda, ranking widocznie się zmieniał, przy zbliżonych wartościach miary RMSE.